﻿#region Copyright © 2010, Ryan Emerle; All rights reserved

// Copyright © 2010, Ryan Emerle
// All rights reserved.
// http://www.emerle.net/
// 
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 
// - Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 
// - Neither the name of the Ryan Emerle, nor the names of any
// contributors may be used to endorse or promote products
// derived from this software without specific prior written 
// permission. 
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
// POSSIBILITY OF SUCH DAMAGE.

#endregion

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using BatterySaver.Lib.Actions;
using BatterySaver.Lib.Actions.UI;
using BatterySaver.Properties;

namespace BatterySaver.UI
{
   /// <summary>
   ///    The action editor template.  Actions will be loaded into this form.
   /// </summary>
   public partial class ActionEditorForm : Form
   {
      private IActionUiComponent _innerControl;

      /// <summary>
      ///    Initializes a new instance of the <see cref = "ActionEditorForm" /> class.
      /// </summary>
      /// <param name = "innerControl">The inner control.</param>
      public ActionEditorForm( IActionUiComponent innerControl )
      {
         InitializeComponent();
         Icon = Resources.Icon_Application;
         Text = ActionEditorResources.String_Title;
         saveButton.Text = Resources.String_SaveButton;
         cancelButton.Text = Resources.String_CancelButton;
         InnerControl = innerControl;
      }

      /// <summary>
      ///    Loads the action.
      /// </summary>
      /// <param name = "action">The action.</param>
      public void LoadAction( IAction action )
      {
         _innerControl.LoadAction( action );
      }

      /// <summary>
      ///    Gets or sets the inner control.
      /// </summary>
      /// <value>The inner control.</value>
      public IActionUiComponent InnerControl
      {
         get { return _innerControl; }
         set
         {
            _innerControl = value;
            actionComponentPanel.Controls.Add( _innerControl.Control );
            _innerControl.Control.Dock = DockStyle.Fill;
            MaximumSize = new Size( _innerControl.Control.MaximumSize.Width + 60, _innerControl.Control.MaximumSize.Height + 90 );
            MinimumSize = new Size( _innerControl.Control.MinimumSize.Width + 60, _innerControl.Control.MinimumSize.Height + 90 );
         }
      }

      /// <summary>
      ///    Save button "Click" handler
      /// </summary>
      /// <param name = "sender">The sender.</param>
      /// <param name = "e">The <see cref = "System.EventArgs" /> instance containing the event data.</param>
      private void SaveButtonClick( object sender, EventArgs e )
      {
         if ( ValidateChildren( ValidationConstraints.Enabled | ValidationConstraints.Visible ) )
         {
            _innerControl.Save();
            DialogResult = DialogResult.OK;
            Close();
         }
      }

      /// <summary>
      ///    Cancel button "Click" handler
      /// </summary>
      /// <param name = "sender">The sender.</param>
      /// <param name = "e">The <see cref = "System.EventArgs" /> instance containing the event data.</param>
      private void CancelButtonClick( object sender, EventArgs e )
      {
         DialogResult = DialogResult.Cancel;
         Close();
      }
   }
}